Skip to content

Add Navigation Overlay close block (behind experiment)#73724

Merged
getdave merged 28 commits intotrunkfrom
add-overlay-close-block
Dec 11, 2025
Merged

Add Navigation Overlay close block (behind experiment)#73724
getdave merged 28 commits intotrunkfrom
add-overlay-close-block

Conversation

@getdave
Copy link
Contributor

@getdave getdave commented Dec 3, 2025

What

Adds a new experimental core/overlay-close block that provides a customizable close button for navigation overlays. The block supports three display modes (icon only, text only, or both), RichText editing with bold/italic formatting, and full block supports for color, spacing, and typography.

This implements the block-based approach for the close button mentioned in #73079, allowing styling to rely on standard block affordances rather than custom controls on the Navigation block.

Why

As outlined in #73079, overlay design should prioritize stylistic changes being made when editing the overlay template itself. By providing a dedicated block for the close button, users can fully customize its appearance using standard block editing tools (color, spacing, typography) without requiring custom controls on the Navigation block.

How

  • Introduces core/overlay-close block with:
    • Three display modes: icon only, text only, or both (configurable via inspector controls)
    • RichText support for text content with bold/italic formatting
    • Full block supports: color (text/background), spacing (padding), and typography
    • Proper spacing between icon and text when both are displayed
  • Uses @wordpress/components Button component in editor for consistent UI
  • Only registered when gutenberg-customizable-navigation-overlays experiment is enabled
  • Follows existing block library patterns and conventions

Notes

Future Considerations

This block currently uses a hardcoded close icon (X). In the future, we may want to support the proposed Icons API and/or an Icon block to allow users to customize the icon. We should carefully consider how to implement this while maintaining backwards compatibility with existing blocks that use the current hardcoded icon approach. This may involve extending the displayMode attribute or introducing a new icon attribute that can accept either a predefined icon identifier or a block reference.

Front end interactivity

Front-end rendering of the block with Interactivity API is not yet implemented. This will be added in future iterations.

Testing Instructions

  1. Enable the gutenberg-customizable-navigation-overlays experiment in Gutenberg settings
  2. Create a new Overlay template part: Navigate to Patterns → Template Parts → New and create an Overlay template part
  3. Add the core/overlay-close block to the overlay template part
  4. Experiment with the block controls:
    • Switch between display modes (icon/text/both) in the inspector controls
    • Edit the text content and apply bold/italic formatting
    • Apply color, spacing (padding), and typography styles
    • Verify proper spacing between icon and text when both are displayed

Part of #73079

@getdave getdave self-assigned this Dec 3, 2025
@getdave getdave changed the title Add experimental overlay-close block Add Overlay close block (behind experiment) Dec 3, 2025
@getdave
Copy link
Contributor Author

getdave commented Dec 3, 2025

@mikachan as you've been working a lot on new blocks lately would you be able to take a look at the implementation here to see it follows best practices? 🙏

@getdave
Copy link
Contributor Author

getdave commented Dec 3, 2025

@mcsf @ryanwelcher I'm aware that there is a proposal for an Icons API/Registry and also potentially a Icon block. How do you see the block in this PR working with that system?

Note that we're going to need to add some pretty specific interactivity to this block when rendering within the Navigation block on the front of the site (toggle Nav block overlay open/close...etc) so I do think it needs to be its own block. However, I'm keen to see how we could allow for things like customising the Icon...etc. I'd very much appreciate your input here.

@getdave
Copy link
Contributor Author

getdave commented Dec 3, 2025

@jasmussen If we go ahead with this block we're going to need a custom icon 🙏 I don't think we should use X for the block icon as it will be a case of too many visible X in the Editor.

@getdave getdave requested a review from jasmussen December 3, 2025 15:27
@getdave getdave added New Block Suggestion for a new block [Type] Experimental Experimental feature or API. [Feature] Navigation Menus Any issue relating to Navigation Menus labels Dec 3, 2025
@github-actions
Copy link

github-actions bot commented Dec 3, 2025

Size Change: +1.96 kB (+0.08%)

Total Size: 2.58 MB

Filename Size Change
build/scripts/block-library/index.min.js 279 kB +1.23 kB (+0.44%)
build/scripts/edit-site/index.min.js 234 kB -29 B (-0.01%)
build/scripts/editor/index.min.js 284 kB -32 B (-0.01%)
build/styles/block-library/style-rtl.css 16.6 kB +86 B (+0.52%)
build/styles/block-library/style.css 16.6 kB +87 B (+0.53%)
build/styles/edit-site/style-rtl.css 15.9 kB +12 B (+0.08%)
build/styles/edit-site/style.css 15.9 kB +11 B (+0.07%)
build/styles/editor/style-rtl.css 18.6 kB +48 B (+0.26%)
build/styles/editor/style.css 18.6 kB +46 B (+0.25%)
build/styles/block-library/navigation-overlay-close/style-rtl.css 249 B +249 B (new file) 🆕
build/styles/block-library/navigation-overlay-close/style.css 249 B +249 B (new file) 🆕
ℹ️ View Unchanged
Filename Size
build/modules/a11y/index.min.js 355 B
build/modules/abilities/index.min.js 42.3 kB
build/modules/block-editor/utils/fit-text-frontend.min.js 549 B
build/modules/block-library/accordion/view.min.js 779 B
build/modules/block-library/file/view.min.js 346 B
build/modules/block-library/form/view.min.js 528 B
build/modules/block-library/image/view.min.js 1.95 kB
build/modules/block-library/navigation/view.min.js 1.03 kB
build/modules/block-library/query/view.min.js 518 B
build/modules/block-library/search/view.min.js 498 B
build/modules/block-library/tabs/view.min.js 859 B
build/modules/boot/index.min.js 104 kB
build/modules/core-abilities/index.min.js 890 B
build/modules/edit-site-init/index.min.js 2.14 kB
build/modules/interactivity-router/full-page.min.js 451 B
build/modules/interactivity-router/index.min.js 11.5 kB
build/modules/interactivity/index.min.js 14.9 kB
build/modules/latex-to-mathml/index.min.js 56.5 kB
build/modules/latex-to-mathml/loader.min.js 131 B
build/modules/lazy-editor/index.min.js 18.8 kB
build/modules/route/index.min.js 24.6 kB
build/modules/workflow/index.min.js 36.8 kB
build/scripts/a11y/index.min.js 1.06 kB
build/scripts/annotations/index.min.js 2.38 kB
build/scripts/api-fetch/index.min.js 2.83 kB
build/scripts/autop/index.min.js 2.18 kB
build/scripts/blob/index.min.js 631 B
build/scripts/block-directory/index.min.js 8.03 kB
build/scripts/block-editor/index.min.js 315 kB
build/scripts/block-serialization-default-parser/index.min.js 1.16 kB
build/scripts/block-serialization-spec-parser/index.min.js 3.08 kB
build/scripts/blocks/index.min.js 56.4 kB
build/scripts/commands/index.min.js 19.9 kB
build/scripts/components/index.min.js 273 kB
build/scripts/compose/index.min.js 13.9 kB
build/scripts/core-commands/index.min.js 4.13 kB
build/scripts/core-data/index.min.js 86.7 kB
build/scripts/customize-widgets/index.min.js 12.3 kB
build/scripts/data-controls/index.min.js 793 B
build/scripts/data/index.min.js 9.62 kB
build/scripts/date/index.min.js 23.6 kB
build/scripts/deprecated/index.min.js 752 B
build/scripts/dom-ready/index.min.js 476 B
build/scripts/dom/index.min.js 4.91 kB
build/scripts/edit-post/index.min.js 16.3 kB
build/scripts/edit-widgets/index.min.js 20 kB
build/scripts/element/index.min.js 5.19 kB
build/scripts/escape-html/index.min.js 586 B
build/scripts/format-library/index.min.js 10.8 kB
build/scripts/hooks/index.min.js 1.83 kB
build/scripts/html-entities/index.min.js 494 B
build/scripts/i18n/index.min.js 2.46 kB
build/scripts/is-shallow-equal/index.min.js 568 B
build/scripts/keyboard-shortcuts/index.min.js 1.57 kB
build/scripts/keycodes/index.min.js 1.53 kB
build/scripts/list-reusable-blocks/index.min.js 2.44 kB
build/scripts/media-utils/index.min.js 69.4 kB
build/scripts/notices/index.min.js 1.11 kB
build/scripts/nux/index.min.js 1.88 kB
build/scripts/patterns/index.min.js 7.87 kB
build/scripts/plugins/index.min.js 2.14 kB
build/scripts/preferences-persistence/index.min.js 2.15 kB
build/scripts/preferences/index.min.js 3.31 kB
build/scripts/primitives/index.min.js 1.01 kB
build/scripts/priority-queue/index.min.js 1.61 kB
build/scripts/private-apis/index.min.js 1.07 kB
build/scripts/react-i18n/index.min.js 832 B
build/scripts/react-refresh-entry/index.min.js 9.44 kB
build/scripts/react-refresh-runtime/index.min.js 3.59 kB
build/scripts/redux-routine/index.min.js 3.36 kB
build/scripts/reusable-blocks/index.min.js 2.93 kB
build/scripts/rich-text/index.min.js 12.9 kB
build/scripts/router/index.min.js 5.96 kB
build/scripts/server-side-render/index.min.js 1.91 kB
build/scripts/shortcode/index.min.js 1.58 kB
build/scripts/style-engine/index.min.js 2.33 kB
build/scripts/theme/index.min.js 20.8 kB
build/scripts/token-list/index.min.js 739 B
build/scripts/undo-manager/index.min.js 917 B
build/scripts/url/index.min.js 3.98 kB
build/scripts/vendors/react-dom.min.js 43 kB
build/scripts/vendors/react-jsx-runtime.min.js 691 B
build/scripts/vendors/react.min.js 4.27 kB
build/scripts/viewport/index.min.js 1.22 kB
build/scripts/warning/index.min.js 454 B
build/scripts/widgets/index.min.js 7.81 kB
build/scripts/wordcount/index.min.js 1.04 kB
build/styles/block-directory/style-rtl.css 1.05 kB
build/styles/block-directory/style.css 1.05 kB
build/styles/block-editor/content-rtl.css 4.8 kB
build/styles/block-editor/content.css 4.79 kB
build/styles/block-editor/default-editor-styles-rtl.css 224 B
build/styles/block-editor/default-editor-styles.css 224 B
build/styles/block-editor/style-rtl.css 16.4 kB
build/styles/block-editor/style.css 16.4 kB
build/styles/block-library/accordion-heading/style-rtl.css 325 B
build/styles/block-library/accordion-heading/style.css 325 B
build/styles/block-library/accordion-item/style-rtl.css 180 B
build/styles/block-library/accordion-item/style.css 180 B
build/styles/block-library/accordion-panel/style-rtl.css 99 B
build/styles/block-library/accordion-panel/style.css 99 B
build/styles/block-library/accordion/style-rtl.css 62 B
build/styles/block-library/accordion/style.css 62 B
build/styles/block-library/archives/editor-rtl.css 61 B
build/styles/block-library/archives/editor.css 61 B
build/styles/block-library/archives/style-rtl.css 90 B
build/styles/block-library/archives/style.css 90 B
build/styles/block-library/audio/editor-rtl.css 149 B
build/styles/block-library/audio/editor.css 151 B
build/styles/block-library/audio/style-rtl.css 132 B
build/styles/block-library/audio/style.css 132 B
build/styles/block-library/audio/theme-rtl.css 134 B
build/styles/block-library/audio/theme.css 134 B
build/styles/block-library/avatar/editor-rtl.css 115 B
build/styles/block-library/avatar/editor.css 115 B
build/styles/block-library/avatar/style-rtl.css 104 B
build/styles/block-library/avatar/style.css 104 B
build/styles/block-library/breadcrumbs/style-rtl.css 203 B
build/styles/block-library/breadcrumbs/style.css 203 B
build/styles/block-library/button/editor-rtl.css 265 B
build/styles/block-library/button/editor.css 265 B
build/styles/block-library/button/style-rtl.css 554 B
build/styles/block-library/button/style.css 554 B
build/styles/block-library/buttons/editor-rtl.css 291 B
build/styles/block-library/buttons/editor.css 291 B
build/styles/block-library/buttons/style-rtl.css 349 B
build/styles/block-library/buttons/style.css 349 B
build/styles/block-library/calendar/style-rtl.css 239 B
build/styles/block-library/calendar/style.css 239 B
build/styles/block-library/categories/editor-rtl.css 132 B
build/styles/block-library/categories/editor.css 131 B
build/styles/block-library/categories/style-rtl.css 152 B
build/styles/block-library/categories/style.css 152 B
build/styles/block-library/classic-rtl.css 321 B
build/styles/block-library/classic.css 321 B
build/styles/block-library/code/editor-rtl.css 53 B
build/styles/block-library/code/editor.css 53 B
build/styles/block-library/code/style-rtl.css 139 B
build/styles/block-library/code/style.css 139 B
build/styles/block-library/code/theme-rtl.css 122 B
build/styles/block-library/code/theme.css 122 B
build/styles/block-library/columns/editor-rtl.css 108 B
build/styles/block-library/columns/editor.css 108 B
build/styles/block-library/columns/style-rtl.css 421 B
build/styles/block-library/columns/style.css 421 B
build/styles/block-library/comment-author-avatar/editor-rtl.css 124 B
build/styles/block-library/comment-author-avatar/editor.css 124 B
build/styles/block-library/comment-author-name/style-rtl.css 72 B
build/styles/block-library/comment-author-name/style.css 72 B
build/styles/block-library/comment-content/style-rtl.css 120 B
build/styles/block-library/comment-content/style.css 120 B
build/styles/block-library/comment-date/style-rtl.css 65 B
build/styles/block-library/comment-date/style.css 65 B
build/styles/block-library/comment-edit-link/style-rtl.css 70 B
build/styles/block-library/comment-edit-link/style.css 70 B
build/styles/block-library/comment-reply-link/style-rtl.css 71 B
build/styles/block-library/comment-reply-link/style.css 71 B
build/styles/block-library/comment-template/style-rtl.css 191 B
build/styles/block-library/comment-template/style.css 191 B
build/styles/block-library/comments-pagination-numbers/editor-rtl.css 122 B
build/styles/block-library/comments-pagination-numbers/editor.css 121 B
build/styles/block-library/comments-pagination/editor-rtl.css 168 B
build/styles/block-library/comments-pagination/editor.css 168 B
build/styles/block-library/comments-pagination/style-rtl.css 201 B
build/styles/block-library/comments-pagination/style.css 201 B
build/styles/block-library/comments-title/editor-rtl.css 75 B
build/styles/block-library/comments-title/editor.css 75 B
build/styles/block-library/comments/editor-rtl.css 842 B
build/styles/block-library/comments/editor.css 842 B
build/styles/block-library/comments/style-rtl.css 637 B
build/styles/block-library/comments/style.css 637 B
build/styles/block-library/common-rtl.css 1.11 kB
build/styles/block-library/common.css 1.11 kB
build/styles/block-library/cover/editor-rtl.css 631 B
build/styles/block-library/cover/editor.css 631 B
build/styles/block-library/cover/style-rtl.css 1.82 kB
build/styles/block-library/cover/style.css 1.81 kB
build/styles/block-library/details/editor-rtl.css 65 B
build/styles/block-library/details/editor.css 65 B
build/styles/block-library/details/style-rtl.css 86 B
build/styles/block-library/details/style.css 86 B
build/styles/block-library/editor-elements-rtl.css 75 B
build/styles/block-library/editor-elements.css 75 B
build/styles/block-library/editor-rtl.css 11.8 kB
build/styles/block-library/editor.css 11.8 kB
build/styles/block-library/elements-rtl.css 54 B
build/styles/block-library/elements.css 54 B
build/styles/block-library/embed/editor-rtl.css 331 B
build/styles/block-library/embed/editor.css 331 B
build/styles/block-library/embed/style-rtl.css 448 B
build/styles/block-library/embed/style.css 448 B
build/styles/block-library/embed/theme-rtl.css 133 B
build/styles/block-library/embed/theme.css 133 B
build/styles/block-library/file/editor-rtl.css 324 B
build/styles/block-library/file/editor.css 324 B
build/styles/block-library/file/style-rtl.css 278 B
build/styles/block-library/file/style.css 278 B
build/styles/block-library/footnotes/style-rtl.css 198 B
build/styles/block-library/footnotes/style.css 197 B
build/styles/block-library/form-input/editor-rtl.css 229 B
build/styles/block-library/form-input/editor.css 229 B
build/styles/block-library/form-input/style-rtl.css 366 B
build/styles/block-library/form-input/style.css 366 B
build/styles/block-library/form-submission-notification/editor-rtl.css 344 B
build/styles/block-library/form-submission-notification/editor.css 341 B
build/styles/block-library/form-submit-button/style-rtl.css 69 B
build/styles/block-library/form-submit-button/style.css 69 B
build/styles/block-library/freeform/editor-rtl.css 2.59 kB
build/styles/block-library/freeform/editor.css 2.59 kB
build/styles/block-library/gallery/editor-rtl.css 615 B
build/styles/block-library/gallery/editor.css 616 B
build/styles/block-library/gallery/style-rtl.css 1.84 kB
build/styles/block-library/gallery/style.css 1.84 kB
build/styles/block-library/gallery/theme-rtl.css 108 B
build/styles/block-library/gallery/theme.css 108 B
build/styles/block-library/group/editor-rtl.css 335 B
build/styles/block-library/group/editor.css 335 B
build/styles/block-library/group/style-rtl.css 103 B
build/styles/block-library/group/style.css 103 B
build/styles/block-library/group/theme-rtl.css 79 B
build/styles/block-library/group/theme.css 79 B
build/styles/block-library/heading/style-rtl.css 205 B
build/styles/block-library/heading/style.css 205 B
build/styles/block-library/html/editor-rtl.css 419 B
build/styles/block-library/html/editor.css 419 B
build/styles/block-library/image/editor-rtl.css 763 B
build/styles/block-library/image/editor.css 763 B
build/styles/block-library/image/style-rtl.css 1.6 kB
build/styles/block-library/image/style.css 1.59 kB
build/styles/block-library/image/theme-rtl.css 137 B
build/styles/block-library/image/theme.css 137 B
build/styles/block-library/latest-comments/style-rtl.css 355 B
build/styles/block-library/latest-comments/style.css 354 B
build/styles/block-library/latest-posts/editor-rtl.css 139 B
build/styles/block-library/latest-posts/editor.css 138 B
build/styles/block-library/latest-posts/style-rtl.css 520 B
build/styles/block-library/latest-posts/style.css 520 B
build/styles/block-library/list/style-rtl.css 107 B
build/styles/block-library/list/style.css 107 B
build/styles/block-library/loginout/style-rtl.css 61 B
build/styles/block-library/loginout/style.css 61 B
build/styles/block-library/math/editor-rtl.css 105 B
build/styles/block-library/math/editor.css 105 B
build/styles/block-library/math/style-rtl.css 61 B
build/styles/block-library/math/style.css 61 B
build/styles/block-library/media-text/editor-rtl.css 321 B
build/styles/block-library/media-text/editor.css 320 B
build/styles/block-library/media-text/style-rtl.css 543 B
build/styles/block-library/media-text/style.css 542 B
build/styles/block-library/more/editor-rtl.css 393 B
build/styles/block-library/more/editor.css 393 B
build/styles/block-library/navigation-link/editor-rtl.css 645 B
build/styles/block-library/navigation-link/editor.css 647 B
build/styles/block-library/navigation-link/style-rtl.css 190 B
build/styles/block-library/navigation-link/style.css 188 B
build/styles/block-library/navigation-submenu/editor-rtl.css 295 B
build/styles/block-library/navigation-submenu/editor.css 294 B
build/styles/block-library/navigation/editor-rtl.css 2.25 kB
build/styles/block-library/navigation/editor.css 2.26 kB
build/styles/block-library/navigation/style-rtl.css 2.27 kB
build/styles/block-library/navigation/style.css 2.25 kB
build/styles/block-library/nextpage/editor-rtl.css 392 B
build/styles/block-library/nextpage/editor.css 392 B
build/styles/block-library/page-list/editor-rtl.css 356 B
build/styles/block-library/page-list/editor.css 356 B
build/styles/block-library/page-list/style-rtl.css 192 B
build/styles/block-library/page-list/style.css 192 B
build/styles/block-library/paragraph/editor-rtl.css 251 B
build/styles/block-library/paragraph/editor.css 251 B
build/styles/block-library/paragraph/style-rtl.css 341 B
build/styles/block-library/paragraph/style.css 340 B
build/styles/block-library/post-author-biography/style-rtl.css 74 B
build/styles/block-library/post-author-biography/style.css 74 B
build/styles/block-library/post-author-name/style-rtl.css 69 B
build/styles/block-library/post-author-name/style.css 69 B
build/styles/block-library/post-author/style-rtl.css 188 B
build/styles/block-library/post-author/style.css 189 B
build/styles/block-library/post-comments-count/style-rtl.css 72 B
build/styles/block-library/post-comments-count/style.css 72 B
build/styles/block-library/post-comments-form/editor-rtl.css 96 B
build/styles/block-library/post-comments-form/editor.css 96 B
build/styles/block-library/post-comments-form/style-rtl.css 525 B
build/styles/block-library/post-comments-form/style.css 525 B
build/styles/block-library/post-comments-link/style-rtl.css 71 B
build/styles/block-library/post-comments-link/style.css 71 B
build/styles/block-library/post-content/style-rtl.css 61 B
build/styles/block-library/post-content/style.css 61 B
build/styles/block-library/post-date/style-rtl.css 62 B
build/styles/block-library/post-date/style.css 62 B
build/styles/block-library/post-excerpt/editor-rtl.css 71 B
build/styles/block-library/post-excerpt/editor.css 71 B
build/styles/block-library/post-excerpt/style-rtl.css 155 B
build/styles/block-library/post-excerpt/style.css 155 B
build/styles/block-library/post-featured-image/editor-rtl.css 719 B
build/styles/block-library/post-featured-image/editor.css 717 B
build/styles/block-library/post-featured-image/style-rtl.css 347 B
build/styles/block-library/post-featured-image/style.css 347 B
build/styles/block-library/post-navigation-link/style-rtl.css 215 B
build/styles/block-library/post-navigation-link/style.css 214 B
build/styles/block-library/post-template/style-rtl.css 414 B
build/styles/block-library/post-template/style.css 414 B
build/styles/block-library/post-terms/style-rtl.css 96 B
build/styles/block-library/post-terms/style.css 96 B
build/styles/block-library/post-time-to-read/style-rtl.css 70 B
build/styles/block-library/post-time-to-read/style.css 70 B
build/styles/block-library/post-title/style-rtl.css 162 B
build/styles/block-library/post-title/style.css 162 B
build/styles/block-library/preformatted/style-rtl.css 125 B
build/styles/block-library/preformatted/style.css 125 B
build/styles/block-library/pullquote/editor-rtl.css 133 B
build/styles/block-library/pullquote/editor.css 133 B
build/styles/block-library/pullquote/style-rtl.css 365 B
build/styles/block-library/pullquote/style.css 365 B
build/styles/block-library/pullquote/theme-rtl.css 176 B
build/styles/block-library/pullquote/theme.css 176 B
build/styles/block-library/query-pagination-numbers/editor-rtl.css 121 B
build/styles/block-library/query-pagination-numbers/editor.css 118 B
build/styles/block-library/query-pagination/editor-rtl.css 154 B
build/styles/block-library/query-pagination/editor.css 154 B
build/styles/block-library/query-pagination/style-rtl.css 237 B
build/styles/block-library/query-pagination/style.css 237 B
build/styles/block-library/query-title/style-rtl.css 64 B
build/styles/block-library/query-title/style.css 64 B
build/styles/block-library/query-total/style-rtl.css 64 B
build/styles/block-library/query-total/style.css 64 B
build/styles/block-library/query/editor-rtl.css 438 B
build/styles/block-library/query/editor.css 438 B
build/styles/block-library/quote/style-rtl.css 238 B
build/styles/block-library/quote/style.css 238 B
build/styles/block-library/quote/theme-rtl.css 233 B
build/styles/block-library/quote/theme.css 236 B
build/styles/block-library/read-more/style-rtl.css 131 B
build/styles/block-library/read-more/style.css 131 B
build/styles/block-library/reset-rtl.css 472 B
build/styles/block-library/reset.css 472 B
build/styles/block-library/rss/editor-rtl.css 126 B
build/styles/block-library/rss/editor.css 126 B
build/styles/block-library/rss/style-rtl.css 284 B
build/styles/block-library/rss/style.css 283 B
build/styles/block-library/search/editor-rtl.css 199 B
build/styles/block-library/search/editor.css 199 B
build/styles/block-library/search/style-rtl.css 665 B
build/styles/block-library/search/style.css 666 B
build/styles/block-library/search/theme-rtl.css 113 B
build/styles/block-library/search/theme.css 113 B
build/styles/block-library/separator/editor-rtl.css 100 B
build/styles/block-library/separator/editor.css 100 B
build/styles/block-library/separator/style-rtl.css 248 B
build/styles/block-library/separator/style.css 248 B
build/styles/block-library/separator/theme-rtl.css 195 B
build/styles/block-library/separator/theme.css 195 B
build/styles/block-library/shortcode/editor-rtl.css 286 B
build/styles/block-library/shortcode/editor.css 286 B
build/styles/block-library/site-logo/editor-rtl.css 773 B
build/styles/block-library/site-logo/editor.css 770 B
build/styles/block-library/site-logo/style-rtl.css 218 B
build/styles/block-library/site-logo/style.css 218 B
build/styles/block-library/site-tagline/editor-rtl.css 87 B
build/styles/block-library/site-tagline/editor.css 87 B
build/styles/block-library/site-tagline/style-rtl.css 65 B
build/styles/block-library/site-tagline/style.css 65 B
build/styles/block-library/site-title/editor-rtl.css 85 B
build/styles/block-library/site-title/editor.css 85 B
build/styles/block-library/site-title/style-rtl.css 143 B
build/styles/block-library/site-title/style.css 143 B
build/styles/block-library/social-link/editor-rtl.css 314 B
build/styles/block-library/social-link/editor.css 314 B
build/styles/block-library/social-links/editor-rtl.css 339 B
build/styles/block-library/social-links/editor.css 338 B
build/styles/block-library/social-links/style-rtl.css 1.51 kB
build/styles/block-library/social-links/style.css 1.51 kB
build/styles/block-library/spacer/editor-rtl.css 346 B
build/styles/block-library/spacer/editor.css 346 B
build/styles/block-library/spacer/style-rtl.css 48 B
build/styles/block-library/spacer/style.css 48 B
build/styles/block-library/tab/style-rtl.css 202 B
build/styles/block-library/tab/style.css 202 B
build/styles/block-library/table-of-contents/style-rtl.css 83 B
build/styles/block-library/table-of-contents/style.css 83 B
build/styles/block-library/table/editor-rtl.css 394 B
build/styles/block-library/table/editor.css 394 B
build/styles/block-library/table/style-rtl.css 641 B
build/styles/block-library/table/style.css 640 B
build/styles/block-library/table/theme-rtl.css 152 B
build/styles/block-library/table/theme.css 152 B
build/styles/block-library/tabs/editor-rtl.css 236 B
build/styles/block-library/tabs/editor.css 236 B
build/styles/block-library/tabs/style-rtl.css 983 B
build/styles/block-library/tabs/style.css 983 B
build/styles/block-library/tag-cloud/editor-rtl.css 92 B
build/styles/block-library/tag-cloud/editor.css 92 B
build/styles/block-library/tag-cloud/style-rtl.css 248 B
build/styles/block-library/tag-cloud/style.css 248 B
build/styles/block-library/template-part/editor-rtl.css 368 B
build/styles/block-library/template-part/editor.css 368 B
build/styles/block-library/template-part/theme-rtl.css 113 B
build/styles/block-library/template-part/theme.css 113 B
build/styles/block-library/term-count/style-rtl.css 63 B
build/styles/block-library/term-count/style.css 63 B
build/styles/block-library/term-description/style-rtl.css 126 B
build/styles/block-library/term-description/style.css 126 B
build/styles/block-library/term-name/style-rtl.css 62 B
build/styles/block-library/term-name/style.css 62 B
build/styles/block-library/term-template/editor-rtl.css 225 B
build/styles/block-library/term-template/editor.css 225 B
build/styles/block-library/term-template/style-rtl.css 114 B
build/styles/block-library/term-template/style.css 114 B
build/styles/block-library/text-columns/editor-rtl.css 95 B
build/styles/block-library/text-columns/editor.css 95 B
build/styles/block-library/text-columns/style-rtl.css 165 B
build/styles/block-library/text-columns/style.css 165 B
build/styles/block-library/theme-rtl.css 715 B
build/styles/block-library/theme.css 719 B
build/styles/block-library/verse/style-rtl.css 123 B
build/styles/block-library/verse/style.css 123 B
build/styles/block-library/video/editor-rtl.css 415 B
build/styles/block-library/video/editor.css 416 B
build/styles/block-library/video/style-rtl.css 202 B
build/styles/block-library/video/style.css 202 B
build/styles/block-library/video/theme-rtl.css 134 B
build/styles/block-library/video/theme.css 134 B
build/styles/commands/style-rtl.css 1.72 kB
build/styles/commands/style.css 1.72 kB
build/styles/components/style-rtl.css 14 kB
build/styles/components/style.css 14 kB
build/styles/customize-widgets/style-rtl.css 1.44 kB
build/styles/customize-widgets/style.css 1.44 kB
build/styles/edit-post/classic-rtl.css 426 B
build/styles/edit-post/classic.css 427 B
build/styles/edit-post/style-rtl.css 3.38 kB
build/styles/edit-post/style.css 3.38 kB
build/styles/edit-widgets/style-rtl.css 4.62 kB
build/styles/edit-widgets/style.css 4.62 kB
build/styles/format-library/style-rtl.css 326 B
build/styles/format-library/style.css 326 B
build/styles/list-reusable-blocks/style-rtl.css 1.02 kB
build/styles/list-reusable-blocks/style.css 1.02 kB
build/styles/media-utils/style-rtl.css 400 B
build/styles/media-utils/style.css 400 B
build/styles/nux/style-rtl.css 622 B
build/styles/nux/style.css 618 B
build/styles/patterns/style-rtl.css 611 B
build/styles/patterns/style.css 611 B
build/styles/preferences/style-rtl.css 415 B
build/styles/preferences/style.css 415 B
build/styles/reusable-blocks/style-rtl.css 275 B
build/styles/reusable-blocks/style.css 275 B
build/styles/widgets/style-rtl.css 1.17 kB
build/styles/widgets/style.css 1.18 kB

compressed-size-action

@jasmussen
Copy link
Contributor

A thought:

image

SVG in case @WordPress/gutenberg-design agrees:

<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M18 4H6c-1.1 0-2 .9-2 2v12c0 1.1.9 2 2 2h12c1.1 0 2-.9 2-2V6c0-1.1-.9-2-2-2Zm.5 14c0 .3-.2.5-.5.5H6c-.3 0-.5-.2-.5-.5V6c0-.3.2-.5.5-.5h12c.3 0 .5.2.5.5v12ZM15 8l-3 3-3-3-1.1 1.1 3 3-3 3L9 16.2l3-3 3 3 1.1-1.1-3-3 3-3L15 8Z"/></svg>

@mcsf
Copy link
Contributor

mcsf commented Dec 4, 2025

I'm aware that there is a proposal for an Icons API/Registry and also potentially a Icon block. How do you see the block in this PR working with that system?

Note that we're going to need to add some pretty specific interactivity to this block when rendering within the Navigation block on the front of the site (toggle Nav block overlay open/close...etc) so I do think it needs to be its own block. However, I'm keen to see how we could allow for things like customising the Icon...etc. I'd very much appreciate your input here.

I trust you on the grounds for having a separate block for this. As for the rest:

  • Tell me if my assumptions are correct: 1) in an initial version of this Overlay Close block, the icon won't be customisable; 2) there is no particular reason preventing it from rendering an icon in the front end by referencing an SVG (<img src="foo.svg">).
  • If that's right, then all that's needed is to add the new SVG to the core Icons package. That way, once we have the registry stuff merged, all the changes we make for the Icon component should be directly applicable to this block here.
    • For now, don't let us block you, feel free to inline the icon, etc.
  • For a customisable icon, I think it's a bit early to commit to any method, but that is being explored for the Icon block too.

@getdave
Copy link
Contributor Author

getdave commented Dec 5, 2025

Appreciate the input here @mcsf

  • Tell me if my assumptions are correct: 1) in an initial version of this Overlay Close block, the icon won't be customisable; 2) there is no particular reason preventing it from rendering an icon in the front end by referencing an SVG (<img src="foo.svg">).

Correct 👍

  • If that's right, then all that's needed is to add the new SVG to the core Icons package. That way, once we have the registry stuff merged, all the changes we make for the Icon component should be directly applicable to this block here.

Yeh this is what I was getting at. I want to set up the block so that it's simple/trivial to transition to the Icon Registry in the future. I'll go with what you suggested.

  • For a customisable icon, I think it's a bit early to commit to any method, but that is being explored for the Icon block too.

Yeh I thought that could be the case. I'll keep an eye on the efforts in case they provide additional functionality for this block pre-release.

@@ -0,0 +1,57 @@
{
"$schema": "https://schemas.wp.org/trunk/block.json",
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Should this have a "parent" definition to restrict insertion to the overlay template part?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Interesting. I didn't think that would work at the entity level. I'll give that a try now.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It doesn't. I've used a filter to restrict insertion to when we're editing an overlay template part.

It still shows up in the inserter but that's because we don't seem to have a way to filter that dynamically as it relies on getBlockType settings.

We could consider hiding blocks that can't be inserted from the inserter. That would seem to make sense.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

While we can't use "parent" since the Navigation Overlay isn't a distinct block type (but rather a core/template-part with area set to overlay), we could still use it to limit the usage of the block to Template Parts (in addition to the filter that Dave added). This would at least prevent the block from showing up outside of Template Parts.

Aside, maybe "ancestor" instead of "parent" would be a better fit? In case the Overlay Close button isn't a direct child of a Navigation Overlay but e.g. inside of some Group or Column block 🤔

diff --git a/packages/block-library/src/navigation-overlay-close/block.json b/packages/block-library/src/navigation-overlay-close/block.json
index 96cdabca2a2..aade2aaf570 100644
--- a/packages/block-library/src/navigation-overlay-close/block.json
+++ b/packages/block-library/src/navigation-overlay-close/block.json
@@ -6,6 +6,7 @@
        "category": "design",
        "description": "A customizable button to close overlays.",
        "keywords": [ "close", "overlay", "navigation", "menu" ],
+       "ancestor": [ "core/template-part" ],
        "textdomain": "default",
        "attributes": {
                "displayMode": {
Before After
image image

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Turns out this won't work because when in focused template part editing mode we don't have a template part block. As a result with that attribute in place you can no longer add a Close block to the overlay template.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Turns out this won't work because when in focused template part editing mode we don't have a template part block. As a result with that attribute in place you can no longer add a Close block to the overlay template.

You're right 😢

image

BTW this raises the question if we should make Gutenberg smart enough to understand that if we're currently in focused "x entity" editing mode, and a block includes x in its "parent" or "ancestor" fields, then it should be included in the inserter. I might look into that.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think it should yes. Or we allow blocks to define the inserter setting as a function. That function would need sufficient context to be able to determine whether or not the block should show in a given scenario.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I've filed an issue: #73827

Or we allow blocks to define the inserter setting as a function. That function would need sufficient context to be able to determine whether or not the block should show in a given scenario.

One thing I've discussed with @mtias is to

  1. allow block variations in places such as the "parent" and "ancestor" fields in block.json (using a syntax where the variation name is slash-appended to the block name, e.g. core/heading/h2), and to
  2. create core/template-part variations for each area (resulting in e.g. core/template-part/overlay).

Together, those changes should allow us to limit the block to the Navigation Overlay.

(Note that @mtias is also modifying the behavior of the block scope in variations: #73823)

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

  1. allow block variations in places such as the "parent" and "ancestor" fields in block.json (using a syntax where the variation name is slash-appended to the block name, e.g. core/heading/h2)

Draft PR: #73828

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@ockham Thank you for your work here. As it's experimental, I'm going to go ahead and merge the block and then follow up to include your work when it lands as it looks to be exactly what we'll need here 🙇

@getdave getdave marked this pull request as ready for review December 5, 2025 11:16
@github-actions
Copy link

github-actions bot commented Dec 5, 2025

The following accounts have interacted with this PR and/or linked issues. I will continue to update these lists as activity occurs. You can also manually ask me to refresh this list by adding the props-bot label.

If you're merging code through a pull request on GitHub, copy and paste the following into the bottom of the merge commit message.

Co-authored-by: getdave <get_dave@git.wordpress.org>
Co-authored-by: mtias <matveb@git.wordpress.org>
Co-authored-by: mikachan <mikachan@git.wordpress.org>
Co-authored-by: ockham <bernhard-reiter@git.wordpress.org>
Co-authored-by: jeryj <jeryj@git.wordpress.org>
Co-authored-by: t-hamano <wildworks@git.wordpress.org>
Co-authored-by: jasmussen <joen@git.wordpress.org>
Co-authored-by: mcsf <mcsf@git.wordpress.org>

To understand the WordPress project's expectations around crediting contributors, please review the Contributor Attribution page in the Core Handbook.

Copy link
Member

@mikachan mikachan left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This block looks great so far, looking forward to bringing it in and seeing how it'll work on the front end.

This block currently uses a hardcoded close icon (X). In the future, we may want to support the proposed Icons API and/or an Icon block to allow users to customize the icon. We should carefully consider how to implement this while maintaining backwards compatibility with existing blocks that use the current hardcoded icon approach.

Another option for the icon here could be to use a + character, rotated 45 degrees. This option allows for slightly more flexibility for styling and animations. This is how we're handling the close icon in the Accordion Heading (although it's initially not rotated, and then rotated 45 degrees when expanded). However, I think for this block it's best to stick with the hardcoded close icon for now. I'm mainly just throwing another idea out there from another block that's planning to use the Icons API in the future.

@github-actions
Copy link

github-actions bot commented Dec 5, 2025

Flaky tests detected in 48ab8c2.
Some tests passed with failed attempts. The failures may not be related to this commit but are still reported for visibility. See the documentation for more information.

🔍 Workflow run URL: https://github.com/WordPress/gutenberg/actions/runs/20129333476
📝 Reported issues:

@getdave getdave changed the title Add Overlay close block (behind experiment) Add Navigation Overlay close block (behind experiment) Dec 5, 2025
@getdave getdave force-pushed the add-overlay-close-block branch from 49291b0 to abccb9e Compare December 10, 2025 11:13
@getdave getdave force-pushed the add-overlay-close-block branch from f9ab9fa to e2db952 Compare December 10, 2025 15:02
Copy link
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR adds a new experimental core/navigation-overlay-close block that provides a customizable close button for navigation overlays, implementing a block-based approach that allows users to style the close button using standard block editing tools instead of requiring custom controls on the Navigation block.

Key changes:

  • Introduces the core/navigation-overlay-close block with three display modes (icon, text, or both) and full support for color, spacing, and typography customization
  • Restricts block insertion to overlay template parts only through a filter on blockEditor.__unstableCanInsertBlockType
  • Gates the feature behind the gutenberg-customizable-navigation-overlays experiment flag

Reviewed changes

Copilot reviewed 10 out of 10 changed files in this pull request and generated 5 comments.

Show a summary per file
File Description
packages/block-library/src/navigation-overlay-close/block.json Defines block metadata, attributes (displayMode, text), and supports for color, spacing, and typography
packages/block-library/src/navigation-overlay-close/edit.js Editor component with display mode controls and RichText editing for button text
packages/block-library/src/navigation-overlay-close/save.js Renders button element with conditional icon/text display based on displayMode attribute
packages/block-library/src/navigation-overlay-close/index.js Block registration and filter logic to restrict insertion to overlay template parts
packages/block-library/src/navigation-overlay-close/icon.js Block icon definition using SVG primitives
packages/block-library/src/navigation-overlay-close/index.php Server-side registration function for the block
packages/block-library/src/navigation-overlay-close/style.scss Frontend styles for button appearance, hover, and focus states
packages/block-library/src/navigation-overlay-close/editor.scss Editor-specific styles for minimum button dimensions
packages/block-library/src/index.js Conditionally registers the block when __experimentalNavigationOverlays flag is enabled
docs/reference-guides/core-blocks.md Adds documentation entry for the new Navigation Overlay Close block

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.


- **Name:** core/navigation-overlay-close
- **Category:** design
- **Supports:** color (background, text, ~~gradients~~), spacing (padding), typography (fontSize, lineHeight)
Copy link

Copilot AI Dec 10, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The typography supports documentation is incomplete. The block.json file shows that the block supports additional typography features including fontFamily, fontWeight, fontStyle, textTransform, textDecoration, and letterSpacing, but the documentation only lists fontSize and lineHeight.

Suggested change
- **Supports:** color (background, text, ~~gradients~~), spacing (padding), typography (fontSize, lineHeight)
- **Supports:** color (background, text, ~~gradients~~), spacing (padding), typography (fontSize, lineHeight, fontFamily, fontWeight, fontStyle, textTransform, textDecoration, letterSpacing)

Copilot uses AI. Check for mistakes.

## Navigation Overlay Close

A customizable button to close overlays. ([Source](https://github.com/WordPress/gutenberg/tree/trunk/packages/block-library/src/navigation-overlay-close))
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Maybe add a note about when it's allowed to be inserted (overlay template part)

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

That would require updating the block description in block.json as this is auto generated from that. Not sure 😬

Comment on lines +3 to +4
min-height: 44px;
min-width: 44px;
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Do we have some scss variables we could use instead? Maybe a min button size variable?

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Also, could the font-size impact this icon? Right now the icon is always the same size even when interacting with the font size scale. It feels a bit odd to have the close text really large and the icon stay small. I'm not sure using font size is the right approach for customizing that, but it might work well.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I've switched to em so it's proportional.

I think we should look at a control for icon size in a followup though. It's likely to be needed.

Copy link
Contributor

@jeryj jeryj left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Since this is an experimental block, I'll approve assuming the aria-labels are fixed (should be quick, I can get them tomorrow if needed) and you look into if the experimental key is needed to properly gate the block.

@getdave
Copy link
Contributor Author

getdave commented Dec 11, 2025

Thanks for all the review detail everyone. Ideally I'd like to merge this base implementation and then iterate as we go driven by requirements.

Copy link
Member

@mikachan mikachan left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I agree, this looks good to bring in! 🚢

@getdave getdave merged commit dbff4cc into trunk Dec 11, 2025
36 of 37 checks passed
@getdave getdave deleted the add-overlay-close-block branch December 11, 2025 10:47
@getdave
Copy link
Contributor Author

getdave commented Dec 11, 2025

As the block is experimental, any further changes can be addressed in followups.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

[Feature] Navigation Menus Any issue relating to Navigation Menus New Block Suggestion for a new block [Type] Experimental Experimental feature or API.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

9 participants